// verification/email.go
package verification

import (
	"crypto/tls"
	"fmt"
	"time"

	"gopkg.in/gomail.v2"
)

type EmailConfig struct {
	Host     string
	Port     int
	Username string
	Password string
	From     string        // 发件人显示名称
	Timeout  time.Duration // 连接超时时间
}

type EmailService struct {
	config EmailConfig
}

func NewEmailService(cfg EmailConfig) *EmailService {
	// 设置默认超时时间为10秒
	if cfg.Timeout == 0 {
		cfg.Timeout = 10 * time.Second
	}
	return &EmailService{config: cfg}
}

func (es *EmailService) SendVerificationEmail(to, code string) error {
	m := gomail.NewMessage()

	// 设置发件人格式
	from := es.config.Username
	if es.config.From != "" {
		from = fmt.Sprintf("%s <%s>", es.config.From, es.config.Username)
	}
	m.SetHeader("From", from)
	m.SetHeader("To", to)
	m.SetHeader("Subject", "您的验证码")

	// 邮件内容
	htmlContent := fmt.Sprintf(`
    <div style="font-family: Arial, sans-serif; max-width: 600px; line-height: 1.6;">
        <p>您好！</p>
        <p>您的验证码是：<strong style="color: #1890ff; font-size: 1.2em;">%s</strong></p>
        <p style="color: #999; font-size: 0.9em;">该验证码将在30分钟后失效，请勿泄露给他人。</p>
        <p style="color: #999; font-size: 0.9em;">如非本人操作，请忽略此邮件。</p>
    </div>`, code)

	m.SetBody("text/html", htmlContent)

	// 创建拨号器
	d := gomail.NewDialer(
		es.config.Host,
		es.config.Port,
		es.config.Username,
		es.config.Password,
	)

	// 安全配置
	d.TLSConfig = &tls.Config{
		ServerName:         es.config.Host,
		InsecureSkipVerify: false, // 生产环境建议设为false
	}

	// // 设置超时
	// d.Timeout = es.config.Timeout

	// 发送邮件
	if err := d.DialAndSend(m); err != nil {
		return fmt.Errorf("发送验证码邮件失败: %v", err)
	}

	return nil
}

func (es *EmailService) ForwardFeedbackToAdmin(userid string, username string, userconnect string,feedbackContent string) error {
    m := gomail.NewMessage()

    // 设置发件人格式
    from := es.config.Username
    if es.config.From != "" {
        from = fmt.Sprintf("%s <%s>", es.config.From, es.config.Username)
    }
    m.SetHeader("From", from)
    m.SetHeader("To", "joymap@298686.xyz") // 假设配置中有管理员邮箱
    m.SetHeader("Subject", fmt.Sprintf("用户反馈 - 来自: %s:%s:%s", userid, username, userconnect))

    // 邮件内容
    htmlContent := fmt.Sprintf(`
    <div style="font-family: Arial, sans-serif; max-width: 600px; line-height: 1.6;">
        <p>管理员您好，</p>
        <p>以下是来自用户 <strong>%s:%s</strong> 的反馈内容：</p>
		<p>联系方式: <strong>%s</strong></p>
        <div style="background-color: #f5f5f5; padding: 15px; border-left: 4px solid #1890ff; margin: 10px 0;">
            %s
        </div>
        <p style="color: #999; font-size: 0.9em;">请及时处理此反馈。</p>
    </div>`, userid, username, userconnect, feedbackContent)

    m.SetBody("text/html", htmlContent)

    // 创建拨号器
    d := gomail.NewDialer(
        es.config.Host,
        es.config.Port,
        es.config.Username,
        es.config.Password,
    )

    // 安全配置
    d.TLSConfig = &tls.Config{
        ServerName:         es.config.Host,
        InsecureSkipVerify: false,
    }

    // 发送邮件
    if err := d.DialAndSend(m); err != nil {
        return fmt.Errorf("转发用户反馈邮件失败: %v", err)
    }

    return nil
}